import { route } from 'quasar/wrappers';
import type {
  RouterScrollBehavior} from 'vue-router';
import {
  createMemoryHistory,
  createRouter,
  createWebHashHistory,
  createWebHistory,
} from 'vue-router';

import routes from './routes';
import { LoadingBar } from 'quasar';

/*
 * If not building with SSR mode, you can
 * directly export the Router instantiation;
 *
 * The function below can be async too; either use
 * async/await or return a Promise which resolves
 * with the Router instance.
 */

export default route(function (/* { store, ssrContext } */) {
  const createHistory = process.env.SERVER
    ? createMemoryHistory
    : process.env.VUE_ROUTER_MODE === 'history'
      ? createWebHistory
      : createWebHashHistory;

  const Router = createRouter({
    scrollBehavior: (
      _to: Parameters<RouterScrollBehavior>[0],
      _from: Parameters<RouterScrollBehavior>[1],
      savedPosition: Parameters<RouterScrollBehavior>[2],
    ) => {
      if (savedPosition) {
        return { ...savedPosition };
      } else {
        return { left: 0, top: 0 };
      }
    },
    routes,

    // Leave this as is and make changes in quasar.conf.js instead!
    // quasar.conf.js -> build -> vueRouterMode
    // quasar.conf.js -> build -> publicPath
    history: createHistory(process.env.VUE_ROUTER_BASE),
  });

  Router.beforeEach((to, form, next) => {
    LoadingBar.start();
    next();
  });

  Router.afterEach(() => {
    LoadingBar.stop();
    LoadingBar.stop();
  });

  return Router;
});
